12章 メソッド(関数)
クラスの設計方法を念頭に置きつつ、メソッドをどのように設計すれば良いか (p.406). Kindle 版
これまでの章で解説したメソッド設計もあらためて網羅する
12.1 必ず自身のクラスのインスタンス変数を使うこと
インスタンス変数を安全に操作する
完全コンストラクタ(3.3のMoneyクラス)
出力引数でほかのクラスのインスタンスを変更している(5.4)
12.2 不変をベースに予期せぬ動作を防ぐ関数にすること
12.3 尋ねるな,命じろ
よそのクラスの状態を判断したり値を変更したりしない
呼び出されるメソッドの側で複雑な制御をするよう設計しましょう。(p.408). Kindle 版
(増田本でも見かけた記憶)
クソコード動画 カプセル化
getterとsetter、なぜ複数あるw
12.4 コマンド・クエリ分離
メソッドはコマンド(=変更)またはクエリ(=問い合わせ)のどちらか一方だけを行うよう設計する (p.412). Kindle 版
CQRSとは別(TODO)
モディファイア=コマンドとクエリを同時に行う
コマンドだけ、クエリだけで再利用しやすい
IMO:ファイルIOはコマンドっぽい。ファイルIOとデータ操作(クエリ)が分かれていると再利用しやすいと感じる
IMO:4章 不変の活用の副作用という観点から考えてみたい(クエリ=副作用あり) 副作用して戻り値あるのは再利用しやすく、自分の経験は説明できていそう
12.5 引数
12.6でnullを返さない
5章 低凝集より 5.4(出力引数使わない)、5.5(引数は少なく) (リファクタリング、パラメタオブジェクト。Clean Codeでも)
12.6 戻り値
プリミティブ型を使わず、独自の型を使って戻り値の意図を明確に表明する (p.417). Kindle 版
引数も返り値も独自の型
プリミティブ型と違って、型を取り間違えたらコンパイラで気付ける
(増田本にも)
例外を投げる(値で表現するのではなく)